﻿using Levfier.Proccessors.Parameters;
using System;
using System.Windows;
using System.Windows.Controls;

namespace Levfier.GUI.EditorControls.Parameters
{
    /// <summary>
    /// ParameterSlider.xaml の相互作用ロジック
    /// </summary>
    [Serializable]
    public partial class ParameterSwitch : UserControl, IParameterHolder
    {
        /// <summary>
        /// 値変更が行われたときに発生するイベントハンドラ
        /// </summary>
        public event RoutedPropertyChangedEventHandler<double> ValueChanged;

        /// <summary>
        /// いじる対象のプロセッサパラメータ
        /// </summary>
        public ProccessParameter ProccessParameter { get; set; }

        /// <summary>
        /// コンストラクタ
        /// </summary>
        public ParameterSwitch()
        {
            InitializeComponent();
            this.parameterSwitch.Click += this.Switch_Clicked;
        }

        /// <summary>
        /// パラメータを登録する
        /// </summary>
        /// <param name="param"></param>
        public void RegisterParam(ProccessParameter param)
        {
            this.parameterSwitch.IsChecked = (1.0d == param.Value);
            this.parameterName.Text = param.Name;
            this.ProccessParameter = param;
            this.ProccessParameter.ValueChanged += ProccessParameter_ValueChanged;
            this.ProccessParameter = param;
        }

        /// <summary>
        /// パラメータの値が変わったとき見た目を変える
        /// </summary>
        /// <param name="sender"></param>
        private void ProccessParameter_ValueChanged(object sender)
        {
            if(0 == this.ProccessParameter.Value)
            {
                this.parameterSwitch.IsChecked = false;
            }
            else
            {
                this.parameterSwitch.IsChecked = true;
            }
        }

        /// <summary>
        /// トグルボタンが押下された時の動作
        /// </summary>
        /// <param name="sender">イベント発生源</param>
        /// <param name="e">イベント</param>
        private void Switch_Clicked(object sender, RoutedEventArgs e)
        {
            if (null != this.ProccessParameter)
            {
                if ((bool)this.parameterSwitch.IsChecked) //チェックされている場合
                {
                    this.ProccessParameter.Value = 1;
                }
                else //チェックされていない場合
                {
                    this.ProccessParameter.Value = 0;
                }
            }

            if (null != this.ValueChanged)
            {
                this.ValueChanged(this, null);
            }
        }
    }
}
